import { useCallback } from 'react' import { ErrorCountsChartRenderer, NetworkTrafficRenderer, RequestsByCountryMapRenderer, ResponseSpeedChartRenderer, TopApiRoutesRenderer, TotalRequestsChartRenderer, } from '@/components/interfaces/Reports/renderers/ApiRenderers' import ReportFilterBar from '@/components/interfaces/Reports/ReportFilterBar' import ReportHeader from '@/components/interfaces/Reports/ReportHeader' import ReportPadding from '@/components/interfaces/Reports/ReportPadding' import { REPORT_DATERANGE_HELPER_LABELS } from '@/components/interfaces/Reports/Reports.constants' import ReportStickyNav from '@/components/interfaces/Reports/ReportStickyNav' import ReportWidget from '@/components/interfaces/Reports/ReportWidget' import { DatePickerValue } from '@/components/interfaces/Settings/Logs/Logs.DatePickers' import UpgradePrompt from '@/components/interfaces/Settings/Logs/UpgradePrompt' import DefaultLayout from '@/components/layouts/DefaultLayout' import ObservabilityLayout from '@/components/layouts/ObservabilityLayout/ObservabilityLayout' import { ObservabilityLink } from '@/components/ui/ObservabilityLink' import { useApiReport } from '@/data/reports/api-report-query' import { useReportDateRange } from '@/hooks/misc/useReportDateRange' import type { NextPageWithLayout } from '@/types' export const ApiReport: NextPageWithLayout = () => { const report = useApiReport() const { data, error, filters, isLoading, params, mergeParams, removeFilters, addFilter, refresh, } = report const { datePickerHelpers, datePickerValue, handleDatePickerChange: handleDatePickerChangeFromHook, showUpgradePrompt, setShowUpgradePrompt, } = useReportDateRange(REPORT_DATERANGE_HELPER_LABELS.LAST_60_MINUTES) const handleDatepickerChange = useCallback( (vals: DatePickerValue) => { const promptShown = handleDatePickerChangeFromHook(vals) if (!promptShown) { mergeParams({ iso_timestamp_start: vals.from ?? '', iso_timestamp_end: vals.to ?? '', }) } }, [handleDatePickerChangeFromHook, mergeParams] ) const handleDatepickerChangeForRefresh = useCallback( (vals: DatePickerValue) => { handleDatePickerChangeFromHook(vals) mergeParams({ iso_timestamp_start: vals.from ?? '', iso_timestamp_end: vals.to ?? '', }) handleDatepickerChange(vals) }, [handleDatePickerChangeFromHook, mergeParams, handleDatepickerChange] ) const refreshWithParams = useCallback(async () => { await new Promise((resolve) => setTimeout(resolve, 0)) refresh() }, [refresh]) const onRefreshReport = useCallback(async () => { if (datePickerValue.isHelper && datePickerValue.text) { const selectedHelper = datePickerHelpers.find((h) => h.text === datePickerValue.text) if (selectedHelper) { handleDatepickerChangeForRefresh({ from: selectedHelper.calcFrom(), to: selectedHelper.calcTo(), isHelper: true, text: selectedHelper.text, }) } } await refreshWithParams() }, [datePickerValue, datePickerHelpers, handleDatepickerChangeForRefresh, refreshWithParams]) return ( } >
) } ApiReport.getLayout = (page) => ( {page} ) export default ApiReport